<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // forEach
    // map
    // filter
    // some
    // every
    // find
    // findIndex

    // reduce
    // reduceRight

    // 用法: 数组.xxx()


    
    // forEach  数组遍历
    // 用法: 遍历数组 每次循环时执行传入的回调函数
    // 回调函数的三个形式参数: item => 循环的当前元素 index=>循环的当前下标 array 原数组
    // 返回值: undefined
    // 是否影响原数组: 不影响
    /* var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    list.forEach(function(item,index,array){
        console.log(item,index,array);
    })

    var sum = 0;
    list.forEach(function(item){
        console.log(item);
        sum += item;
    })
    console.log(sum);*/

    // map   数组映射 (根据原数组得到一个新数组)
    // 用法: 遍历数组 每次循环时执行传入的回调函数,接收回调函数的返回值放到新数组中,返回新数组
    //       回调函数的三个形式参数: item => 循环的当前元素 index=>循环的当前下标 array 原数组
    // 返回值: 新数组
    // 是否影响原数组: 不影响

    // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    // var result = list.map(function(item,index,array){
    //     console.log(item,index,array);
    //     // return item * 10;
    //     // return (item + 10) / 2 ;
    //     return item;
    // })
    // console.log(result);

    // filter   数组过滤/筛选  (将满足条件的元素放到新数组中)
    // 用法: 遍历数组 每次循环时执行传入的回调函数,回调函数返回一个条件,把满足条件的元素放到新数组中(如果返回值不是布尔值, 会隐式转化为布尔值作为条件表达式)
    //       回调函数的三个形式参数: item => 循环的当前元素 index=>循环的当前下标 array 原数组
    // 返回值: 新数组
    // 是否影响原数组: 不影响

    // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    // var result = list.filter(function(item,index,array){
    //     console.log(item,index,array);
    //     // return item % 2 == 0;   // 返回一个条件(偶数) => true || false
    //     return  item % 2 ; // 返回一个数值 => 0  1
    // })
    // console.log(result);


    // some   数组包含
    // 用法: 遍历数组 每次循环时执行传入的回调函数,回调函数返回一个条件,如果有一个元素满足条件则返回true,都不满足返回false (如果返回值不是布尔值, 会隐式转化为布尔值作为条件表达式)
    //       回调函数的三个形式参数: item => 循环的当前元素 index=>循环的当前下标 array 原数组
    // 返回值: true  / false
    // 是否影响原数组: 不影响

    // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    // var result = list.some(function(item,index,array){
    //     console.log(item,index,array);
    //     return item % 2 == 0 && item % 3 == 0;
    // })
    // console.log(result);


    // every   数组均满足
    // 用法: 遍历数组 每次循环时执行传入的回调函数,回调函数返回一个条件,如果所有元素均满足条件则返回true,只要有一个元素不满足 则返回false (如果返回值不是布尔值, 会隐式转化为布尔值作为条件表达式)
    //       回调函数的三个形式参数: item => 循环的当前元素 index=>循环的当前下标 array 原数组
    // 返回值: true  / false
    // 是否影响原数组: 不影响

    // var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    // var result = list.every(function(item,index,array){
    //     console.log(item,index,array);
    //     // return false;
    //     // return true;

    //     // return item >= 0;
    //     return item % 2 == 0;
    // })
    // console.log(result);


    // find()   数组查找 (查找满足条件的第一个元素)
    // 用法: 遍历数组 每次循环时执行传入的回调函数,回调函数返回一个条件, 存在就返回第一个满足条件的元素 (如果回调函数的返回值不是布尔值, 会隐式转化为布尔值作为条件表达式)
    //       回调函数的三个形式参数: item => 循环的当前元素 index=>循环的当前下标 array 原数组
    // 返回值: 满足条件的第一个元素  / undefined
    // 是否影响原数组: 不影响


    // findIndex()   数组查找 (查找满足条件的第一个元素的下标)
    // 用法: 遍历数组 每次循环时执行传入的回调函数,回调函数返回一个条件, 存在就返回第一个满足条件的元素的下标,否则返回 -1 (如果回调函数的返回值不是布尔值, 会隐式转化为布尔值作为条件表达式)
    //     回调函数的三个形式参数: item => 循环的当前元素 index=>循环的当前下标 array 原数组
    // 返回值: 满足条件的第一个元素  / undefined
    // 是否影响原数组: 不影响


    var list = [2, 8, 4, 6, 5, 9, 3, 7, 1];
    var result = list.find(function(item,index,array){
        console.log(item,index,array);
        return item % 3 == 0;
    })
    console.log(result);

    var result = list.findIndex(function(item,index,array){
        console.log(item,index,array);
        return item % 3 == 0;
    })
    console.log(result);





</script>
</html>